/**
 * @param {number[][]} intervals
 * @return {number[][]}
 */
//  以数组 intervals 表示若干个区间的集合，其中单个区间为 intervals[i] = [starti, endi] 。请你合并所有重叠的区间，并返回 一个不重叠的区间数组，该数组需恰好覆盖输入中的所有区间 。
// var merge = function (intervals) {
//   intervals.sort((a, b) => a[0] - b[0])
//   // console.log(intervals);
//   for (let idx = 0; idx < intervals.length - 1; idx++) {
//     // console.log('====>', intervals[idx], intervals[idx + 1]);
//     if (intervals[idx][1] >= intervals[idx + 1][0]) {
//       if (intervals[idx][1] >= intervals[idx + 1][1]) {
//         intervals.splice((idx + 1), 1);
//         // console.log(intervals);
//         idx--
//         continue
//       } else if (intervals[idx][1] <= intervals[idx + 1][1]) {
//         intervals[idx + 1][0] = intervals[idx][0]
//         intervals.splice(idx, 1);
//         // console.log(intervals);
//         idx--
//       }
//     }
//   }
//   return intervals
// };


var merge = function (intervals) {
  if (intervals.length < 2) {
    return intervals;
  }
  intervals.sort(function (a, b) {
    return a[0] - b[0];
  });

  let curr = intervals[0];
  let result = [];

  for (let interval of intervals) {
    if (curr[1] >= interval[0]) {
      curr[1] = Math.max(curr[1], interval[1]);
    } else {
      result.push(curr);
      curr = interval;
    }
  }

  if (curr.length !== 0) {
    result.push(curr);
  }

  return result;
};

// let intervals = [[1, 3], [15, 18], [8, 10], [2, 6]]
// let intervals = [[1, 4], [4, 5]]
// let intervals = [[2, 3], [2, 2], [3, 3], [1, 3], [5, 7], [2, 2], [4, 6]]
// let intervals = [[1, 4], [2, 3], [3, 9], [10,11]]
console.log(merge([[1, 3], [15, 18], [8, 10], [2, 6]]));
console.log(merge([[1, 4], [4, 5]]));
console.log(merge([[2, 3], [2, 2], [3, 3], [1, 3], [5, 7], [2, 2], [4, 6]]));
console.log(merge([[1, 4], [2, 3], [3, 9], [10, 11]]));  